package org.ripple.power.print; import java.io.FileInputStream; import java.util.Locale; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.SimpleDoc; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.JobName; import javax.print.attribute.standard.MediaSizeName; import javax.print.attribute.standard.PageRanges; import org.ripple.power.config.LSystem; import org.ripple.power.utils.FileUtils; public class PrintDirectFunction extends PrintFunction { private DocFlavor df; private SimpleDoc doc; public PrintDirectFunction() { super(); } private void setExt(String name) { if (name == null) { df = null; } else switch (name.toLowerCase()) { case "jpg": df = DocFlavor.INPUT_STREAM.JPEG; break; case "png": df = DocFlavor.INPUT_STREAM.PNG; break; case "gif": df = DocFlavor.INPUT_STREAM.GIF; break; case "txt": df = DocFlavor.INPUT_STREAM.AUTOSENSE; break; case "html": df = DocFlavor.INPUT_STREAM.TEXT_HTML_UTF_8; break; case "pdf": df = DocFlavor.INPUT_STREAM.AUTOSENSE; break; case "print": df = DocFlavor.SERVICE_FORMATTED.PRINTABLE; break; default: df = null; } } @Override public boolean print() { if (df == null) { return false; } else { try { PrintRequestAttributeSet requestAttributeSet = new HashPrintRequestAttributeSet(); requestAttributeSet.add(MediaSizeName.ISO_A4); requestAttributeSet.add(new JobName(LSystem.applicationName + "-" + LSystem.getTime(), Locale.ENGLISH)); PrintService defaultService = PrintServiceLookup .lookupDefaultPrintService(); DocPrintJob job = defaultService.createPrintJob(); if (df == DocFlavor.SERVICE_FORMATTED.PRINTABLE) { doc = new SimpleDoc(new BufferedImagePrintable(path), df, null); requestAttributeSet.add(new PageRanges("1")); } else { FileInputStream fin = new FileInputStream(path); doc = new SimpleDoc(fin, df, null); } job.print(doc, requestAttributeSet); } catch (Exception e) { e.printStackTrace(); return false; } return true; } } @Override public void setPath(String path) { super.setPath(path); setExt(FileUtils.getExtension(path)); } }